home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 3 / Amiga Tools 3.iso / grafik / raytracing / rayshade-4.0.6.3 / inetray / socketpair.c < prev    next >
C/C++ Source or Header  |  1993-08-15  |  1KB  |  42 lines

  1. /*======================================================================
  2.                     S O C K E T P A I R . C 
  3.                     doc: Tue Mar 31 15:12:52 1992
  4.                     dlm: Tue Mar 31 16:24:54 1992
  5.                     (c) 1992 ant@ips.id.ethz.ch
  6.                     uE-Info: 40 73 T 0 0 72 2 2 ofnI
  7. ======================================================================*/
  8.  
  9. /*
  10.     socketpair() implementation for A/UX (guack!)
  11. */
  12.  
  13. #include    <stdio.h>
  14. #include    <sys/types.h>
  15. #include    <sys/socket.h>
  16. #include    <sys/un.h>
  17.  
  18. int socketpair(d,type,protocol,sv)
  19. int d,type,protocol,sv[2];
  20. {
  21.     int    lSock,aLen;
  22.     struct sockaddr_un name;
  23.     
  24.     lSock = socket(d,type,protocol);        /* listen s when tcp */
  25.     if (lSock < 0) return -1;
  26.     name.sun_family = d;                /* bind address */
  27.     tmpnam(name.sun_path);                /* in /tmp */
  28.     if (bind(lSock,&name,sizeof(name)) < 0)
  29.         return -1;
  30.     if ((type != SOCK_DGRAM) && (listen(lSock,1) < 0))
  31.             return -1;
  32.     sv[1] = socket(d,type,protocol);        /* get other side */
  33.     if (sv[1] < 0) return -1;
  34.     if (connect(sv[1],&name,sizeof(name)) < 0)    /* connect it */
  35.         return -1;
  36.     aLen = sizeof(name);
  37.     if (type == SOCK_DGRAM) sv[0] = lSock;        /* get socket */
  38.     else sv[0] = accept(lSock,&name,&aLen);
  39.     if (sv[0] < 0) return -1;
  40.     return 0;                    /* all correct */
  41. }
  42.